//! # 图形管线渲染
//!
//! 将3D空间中的事物转换成2D平面图像的过程。
//!
//! - 模型变换
//! - 相机变换（视图变换）
//! - 投影变换
//! - 视口变换
//! - 光栅化
//!
//! ```text
//!     Modeling Trans       Viewing Trans       Projection Trans       Normalization Trans & Clipping       Viewport Trans
//! MC ----------------> WC ---------------> VC ------------------> PC --------------------------------> NC ----------------> DC
//! ```
//!
//! - MC: 模型坐标
//! - WC: 世界坐标
//! - VC: 相机坐标（视图坐标）
//! - PC: 投影坐标
//! - NC: 归一化坐标
//! - DC: 设备坐标（屏幕坐标）
//!
//! # 坐标变换
//!
//! ```text
//!         ^ y
//!         |
//!         | / -z
//!         |/
//!   ------+-----> x
//!        /|
//!       / |
//!      z
//! ```
//!
//! ## 模型变换
//!
//! 模型坐标变换到世界坐标（即一个坐标系在另一个坐标系的计算）：
//! 变换矩阵的本质为 旋转+平移（实际的变换是进行3D坐标的变换）；
//! 模型变换的作用是将一个模型中所有的坐标，通过模型变换矩阵，变换到世界坐标系中。
//!
//! ## 视图变换
//!
//! 视点（人的眼睛）在世界坐标系的位置为视图坐标系；
//! 视图变换需要将模型坐标变换到视图坐标系中（人的眼睛看向模型）。
//!
//! ## 投影变换
//!
//! 投影变换会丢弃或裁剪视锥之外的物体，得到裁剪坐标（-w <= x,y,z <= w）；
//! 然之除以w分量，得到NC坐标（-1 <= x,y,z <= 1，但是超出视锥体的顶点，其NC坐标也会超出[-1, 1]）。
//!
//! - 正交投影：平行投影，投影线垂直于投影平面，没有远近距离关系
//! - 透视投影变换
//!
//! 模拟远小近大的透视现象。
//!
//! 透视投影时，会修改坐标的w分量，距离观察点越远，w分量越大，且x、y、z的范围均在-w到w间；
//! 这样在透视除法时，x、y、z分量会除以w（即缩放），结果就是远小近大。
//!
//! ## 视口变换
//!
//! 视口变换会将NC坐标映射到屏幕坐标系上。
//!

pub mod pipeline;
pub mod rasterizer;
pub mod shader;
